//! copyright © ecdata.cn 2021 - present
//! 控制层
//! created by tyn 20250317

use crate::service::CustomerApp;
use deck::{DataTable, SelectExecutor, TableService};
use tube::{Result, Value};
use tube_web::RequestParameter;

/// 控制层请求分发
pub async fn distribute(param: &RequestParameter) -> Result<Value> {
    let instance = CustomerApp::new(param);
    // 对系统提供的默认方法进行统一的授权判断
    if param.validate_permission(vec![]) {
        return Err(msa_sdk::no_auth_error());
    }
    match param.method.as_str() {
        // 获取单条信息详情
        "get" => match param.path.as_str() {
            _ => instance
                .select()
                .r#where(conds![{ "id" = param.path.as_str() }])
                .one(),
        },
        // 新建和更新一条数据,给定了id后直接根据id进行更新
        "add" | "update" => instance.upsert(&param.value), // 删除单条数据
        // 根据id或id集进行数据删除
        "delete" => instance.delete_of_id(),
        // 采用分页的方式获取数据
        "page" => instance.get_page_list(vec![], vec![], ""),
        // 不分页获取数据，最大输出1000行数据
        "list" => instance.get_list(vec![], vec![], ""),
        // 更新数据状态
        "status.update" => instance.update_status(&param.value),
        // 未提供的请求输出
        _ => Err(error!(
            "请求方法{}.{}系统未提供。",
            param.module, param.method
        )),
    }
}
